Integer na DateTime v minutach.

Otázka od: David Michal

8. 9. 2002 6:04

Zdravim,
Potrebuji delat nejake vypocty s casem. Jednu hodnotu mam integer a s tou
bych chtel pocitat jako s minutami. Nevite nekdo jak na to? Napr. pokud budu
mit cas time := 16:30 a i := 30,
Jak muzu udelat time := time - i, abych dostal time = 16:00 ?
Diky za cas,
David
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.385 / Virus Database: 217 - Release Date: 04/09/2002

Odpovedá: Blazek Jaroslav

8. 9. 2002 10:15

Ahoj,

> david.michal@www-bv.com 6.9.02 17:04 >>>
>Potrebuji delat nejake vypocty s casem. Jednu hodnotu mam integer a s tou
>bych chtel pocitat jako s minutami. Nevite nekdo jak na to? Napr. pokud budu
>mit cas time := 16:30 a i := 30,
>Jak muzu udelat time := time - i, abych dostal time = 16:00 ?


var cas:TDateTime;
      MinusMinuty:integer;

 cas := Time();
 MinusMinuty := 30;
 ShowMessage(FormatDateTime('hh:mm', cas));

 cas := cas - MinusMinuty / (60 * 24);

 ShowMessage(FormatDateTime('hh:mm', cas));


S pozdravem

Bc. Jaroslav Blazek
Access-IT Ceska Lipa
mailto:jaroslav.blazek@access-it.cz
http://www.access-it.cz
ICQ# : 133673990
+420605/813644

Odpovedá: Jan Sebelík

8. 9. 2002 17:14

> Potrebuji delat nejake vypocty s casem. Jednu hodnotu mam integer a s tou
> bych chtel pocitat jako s minutami. Nevite nekdo jak na to? Napr. pokud budu
> mit cas time := 16:30 a i := 30,
> Jak muzu udelat time := time - i, abych dostal time = 16:00 ?

V typu TDateTime je datum a cas ulozen jako
(pocet dni od nejakeho data)+(cas jako pomerna cast dne).
Takze napr. 12:00 je 0.5, 18:00 je 0.75 atd.

Tedy jestli ti rozumin
T,T1: TDateTime;
I: Integer;
T := StrToTime('16:30');
I := 30;
T1 := T - I/(24*60);
TimeToStr(T1)='16:00:00';

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 0434 692 569 (0776 347735)
=========================================
----------
> Odesílatel: David Michal <david.michal@www-bv.com>
> Komu: delphi-l@clexpert.cz
> Předmět: Integer na DateTime v minutach.
> Datum: 6. září 2002 17:04
>
> Zdravim,
> Potrebuji delat nejake vypocty s casem. Jednu hodnotu mam integer a s tou
> bych chtel pocitat jako s minutami. Nevite nekdo jak na to? Napr. pokud budu
> mit cas time := 16:30 a i := 30,
> Jak muzu udelat time := time - i, abych dostal time = 16:00 ?
> Diky za cas,
> David
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.385 / Virus Database: 217 - Release Date: 04/09/2002

Odpovedá: David Michal

10. 9. 2002 19:59

Zdravim,
Jo tohle funguje pekne, diky. A da se jeste nejakym zpusobem udelat obraceny
prevod?
Napr. cas : TDateTime; Minuty : Integer;
Pokud bude cas = '1:30' jak zajistit aby Minuty = 90 ?
Diky,
David


var cas:TDateTime;
      MinusMinuty:integer;

 cas := Time();
 MinusMinuty := 30;
 ShowMessage(FormatDateTime('hh:mm', cas));

 cas := cas - MinusMinuty / (60 * 24);

 ShowMessage(FormatDateTime('hh:mm', cas));


S pozdravem

Bc. Jaroslav Blazek
Access-IT Ceska Lipa
mailto:jaroslav.blazek@access-it.cz
http://www.access-it.cz
ICQ# : 133673990
+420605/813644

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.385 / Virus Database: 217 - Release Date: 04/09/2002

Odpovedá: Lebeda David

11. 9. 2002 7:23

> Jo tohle funguje pekne, diky. A da se jeste nejakym zpusobem udelat
> obraceny prevod? Napr. cas : TDateTime; Minuty : Integer; Pokud bude
> cas = '1:30' jak zajistit aby Minuty = 90 ?

Ahoj,

no uplne stejne:

Minuty := Cas * 24 * 60;

David Lebeda

Odpovedá: David Michal

11. 9. 2002 10:48

Zdravim,
Jenomze pri tomto zapisu dostanu chybovou hlasku pro kompilaci:
Incompatible types: 'Integer' and 'Extended'
Zapisuji toto:
Minuty := (DM.Q_TimeSheet.FieldByName('LBreak').AsDateTime) * 60 * 24;
Diky,
David

Ahoj,

no uplne stejne:

Minuty := Cas * 24 * 60;

David Lebeda

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.385 / Virus Database: 217 - Release Date: 04/09/2002

Odpovedá: Lebeda David

12. 9. 2002 8:05

> Jenomze pri tomto zapisu dostanu chybovou hlasku pro kompilaci:
> Incompatible types: 'Integer' and 'Extended'
> Zapisuji toto:
> Minuty := (DM.Q_TimeSheet.FieldByName('LBreak').AsDateTime) * 60 * 24;
>
> Minuty := Cas * 24 * 60;
>

Ahoj,

typ TDateTime je ve skutecnosti realne cislo, takze i vyraz Cas * 24 * 60 je
realne
cislo (nemusi jit totiz nutne o cele minuty) - v danem pripade extended.
Promenna
Minuty je typu integer. Bude tedy potreba realne cislo prevest na integer:

 - fce trunc odrizne pripadnou desetinnou cast
 - fce round desetinne cislo zaokrouhli na cele (ale viz help zejmena pripade,
ze
desetinna cast je prave pet desetin - pak to zaokrouhli tak, aby vysledek byl
sude
cislo).

Cili napr. Minuty := round(Cas * 24 * 60);

David Lebeda